#include <bits/stdc++.h>
#define _for(i, a, b) for (int i = (a); i < (int)(b); ++i)
using namespace std;
using LL = long long;
using VL = vector<LL>;
const int P = 1e9 + 7;
struct Mat {
int m, n;
vector<VL> F;
Mat(int _n, int _m) : n(_n), m(_m), F(n, VL(m)) {}
Mat operator * (const Mat& x) const {
Mat ans(n, x.m);
_for(r, 0, n) _for(c, 0, x.m) _for(i, 0, m)
(ans.F[r][c] += F[r][i] * x.F[i][c] % P) %= P;
return ans;
}
Mat operator ^ (LL k) const {
Mat ans = *this, p = *this;
for (--k; k; k >>= 1, p = p * p)
if (k & 1) ans = ans * p;
return ans;
}
};
int main(void) {
ios::sync_with_stdio(false), cin.tie(0);
LL n, k; cin >> n >> k, k--;
vector<LL> A(n);
for (LL& a : A) cin >> a;
if (k == 0) { cout << n << "\n"; return 0; }
Mat G(n, n), F(n, 1);
_for(i, 0, n) _for(j, 0, n)
G.F[i][j] = __builtin_popcountll(A[i] ^ A[j]) % 3 == 0;
_for(i, 0, n) F.F[i][0] = 1;
F = (G ^ k) * F;
LL ans = 0;
_for(i, 0, n) (ans += F.F[i][0]) %= P;
cout << ans << "\n";
return 0;
}
2. Add Two Numbers | 515. Find Largest Value in Each Tree Row |
345. Reverse Vowels of a String | 628. Maximum Product of Three Numbers |
1526A - Mean Inequality | 1526B - I Hate 1111 |
1881. Maximum Value after Insertion | 237. Delete Node in a Linked List |
27. Remove Element | 39. Combination Sum |
378. Kth Smallest Element in a Sorted Matrix | 162. Find Peak Element |
1529A - Eshag Loves Big Arrays | 19. Remove Nth Node From End of List |
925. Long Pressed Name | 1051. Height Checker |
695. Max Area of Island | 402. Remove K Digits |
97. Interleaving String | 543. Diameter of Binary Tree |
124. Binary Tree Maximum Path Sum | 1465. Maximum Area of a Piece of Cake After Horizontal and Vertical Cuts |
501A - Contest | 160A- Twins |
752. Open the Lock | 1535A - Fair Playoff |
1538F - Interesting Function | 1920. Build Array from Permutation |
494. Target Sum | 797. All Paths From Source to Target |